java 数据结构源码--Trie树

node 

package trieTree;

public class TrieTreeNode {
	final int MAX_SIZE=26; 
	int nCount;//记录该字符出现次数  
    char ch; //记录该字符  
    TrieTreeNode[] child;  
      
    public TrieTreeNode() {  
        nCount=1;  
        child=new TrieTreeNode[MAX_SIZE];  
    }  

}

tree

package trieTree;
import trieTree.TrieTreeNode;

public class TrieTree {
	
    //字典树的插入和构建  
    public void createTrie(TrieTreeNode node,String str){  
        if (str==null||str.length()==0) {  
            return;  
        }  
        char[] letters=str.toCharArray();  
        for (int i = 0; i < letters.length; i++) {  
            int pos = letters[i] - 'a';    
            if (node.child[pos] == null) {    
                node.child[pos] = new TrieTreeNode();     
            }else {  
                node.child[pos].nCount++;  
            }  
            node.ch=letters[i];              
            node = node.child[pos];              
        }  
    }  
    //字典树的查找  
    public int findCount(TrieTreeNode node,String str){  
        if (str==null||str.length()==0) {  
            return -1;  
        }  
        char[] letters=str.toCharArray();  
        for (int i = 0; i < letters.length; i++) {  
            int pos = letters[i] - 'a';    
            if (node.child[pos] == null) {    
                return 0;     
            }else {  
                node=node.child[pos];  
            }             
        }  
        return node.nCount;  
    }  

}

测试源码 test


package trieTree;
import trieTree.TrieTree;
import trieTree.TrieTreeNode;

public class test {
	
	 public static void main(String[] args)
	 {
	
	String[] strs={     
            "banana",     
            "band",     
            "bee",     
            "absolute",     
            "acm",     
    };     
    String[] prefix={     
        "ba",     
        "b",     
        "band",     
        "abc",     
    }; 
    
    TrieTree tree = new TrieTree();  
    TrieTreeNode root=new TrieTreeNode();
    
 for (String s : strs) {    
        tree.createTrie(root, s);    
    }     
//    tree.printAllWords();     
    for(String pre:prefix){     
        int num=tree.findCount(root,pre);     
        System.out.println(pre+" "+num);     
    }  
	
}
}


  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值